package com.zhixi.pattern.important.responsibilitychainpattern;

import com.zhixi.pattern.important.responsibilitychainpattern.operation.*;

/**
 * 责任链模式
 *
 *  女儿有请求需要有人做出回应，1父亲，如果父亲不再，则请求2母亲，如果母亲不再，则请求3哥哥
 *
 *  优点：将请求和处理分开，例如Bean，你只需要把它注册进去，而不需要知道它里面的链路是如何调用的
 *      每个Bean的状态，都会有底层RootBeanDefinition进行封装，然后判断
 *
 *  番外：Spring源码
 *      RootBeanDefinition相当于一个类（类似entity、pojo）里面就是存放所有设置Bean的状态（比如：构造参数是否解决，后置处理器 ……）
 *
 *  缺点：性能问题，如果责任链过多，每次请求都从链头请求到链尾
 *
 * @作者 ShuHaoNan
 * @邮箱 shuhaonan1@gmail.com
 * @时间 2020/11/17 10:51
 */
public class ResponsibilityChainPattern {

    public static void main(String[] args) {
        /* 请求等级： 1父亲， 2母亲 3哥哥*/
        Daughter daughter = new DaughterClass(3, "逛街");
        Father father = new Father();
        Mother mother = new Mother();
        Brother brother = new Brother();
        /*  父亲的下一个请求人是母亲 */
        father.setNext(mother);
        /*  母亲的下一个请求人是哥哥 */
        mother.setNext(brother);
        father.HandleMessage(daughter);
    }

}
